package com.itguigu.auth.util;

import com.itguigu.model.system.SysMenu;

import java.util.ArrayList;
import java.util.List;

/**
 *
 */
public class MenuHelper {

    public static List<SysMenu> buildTree(List<SysMenu> sysMenus) {
        // 创建有一个list集合 , 用于最终的额数据
        List<SysMenu> trees = new ArrayList<>();
        // 遍历
        for (SysMenu sysMenu : sysMenus) {
            // 递归入口
            // 根据parentId = 0 作为入口条件
            if (sysMenu.getParentId() == 0){
                trees.add(getChildren(sysMenu , sysMenus));
            }
        }
        return trees;
    }

    /**
     * 递归实现
     * @param sysMenu
     * @param sysMenus
     * @return
     */
    private static SysMenu getChildren(SysMenu sysMenu, List<SysMenu> sysMenus) {
        sysMenu.setChildren(new ArrayList<SysMenu>());
        for (SysMenu menu : sysMenus) {
            // 该行菜单的id 与 菜单列表每一个的父id
            if (sysMenu.getId().longValue() == menu.getParentId().longValue()){
                // 判空 , 如果他没有子菜单了 , 初始化一个
                if (sysMenu.getChildren() == null){
                    sysMenu.setChildren(new ArrayList<>());
                }
                // 去找该id下是否还存在这子菜单 , 并添加上
                sysMenu.getChildren().add(getChildren(menu, sysMenus));
            }

        }
        return sysMenu;
    }
}
